import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCDemo1 {
    public static void main(String[] args) throws SQLException {
        //让用户可以自行输入相关数值
        Scanner sc = new Scanner(System.in);
        //1. 建立数据库源对象
        DataSource dataSource = new MysqlDataSource();
//        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test2?characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");
        //2. 建立连接
        Connection connection = dataSource.getConnection();
        System.out.println("请输入要插入的id");
        int id = sc.nextInt();
        System.out.println("请输入要插入的name");
        String name = sc.next();
        //3. 构造sql语句
        //String sql = "insert into student value(" + id + ", '" + name + "')";// TODO 这里的 name一定要加上引号 'name' 不加就报错 列识别不到
        //当时这样写太丑了 而且容易出错
        //可以使用占位符替换的手段来写sql
        String sql = "insert into student value(?,?)";
        System.out.println(sql);
        //此处不值接用Statement因为其就是包含简单的字符串,没有进行校验和解析,这些工作都交给了服务端来做, 而prepareStatement就直接将这些工作做了
        //减少了后端的压力
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //通过prepareStatement里面的方法来替换占位符'?'
        preparedStatement.setInt(1,id);
        preparedStatement.setString(2,name);
        //4. 执行sql
        //对于增 删 改 以及创建表 删除表这些操作 都统称为update 使用executeUpdate()方法来实现
        // 对于查有另外的方法 executeQuery()方法
        int i = preparedStatement.executeUpdate();
        System.out.println(i);

        //5. 关闭连接, 释放资源
        preparedStatement.close();
        connection.close();


    }
}
